package com.wpen.unit.infra.repository.system.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;

import java.io.Serializable;
import java.util.List;

import com.wpen.unit.infra.repository.system.UserPwdRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.wpen.unit.utils.StringUtil;
import com.wpen.unit.exception.UpdateZeroException;

import com.wpen.unit.infra.mybatis.system.mapper.UserPwdMapper;
import com.wpen.unit.infra.mybatis.system.po.UserPwdPo.UserPwdColumns;
import com.wpen.unit.infra.mybatis.system.po.UserPwdPo;

/**
 * 用户密码维护.
 * 
 * @author Wang Peng
 * @date 2022-12-23
 *
 */
@Repository
@Transactional
public class UserPwdRepositoryImpl extends ServiceImpl<UserPwdMapper, UserPwdPo> implements UserPwdRepository {

    @Override
    public UserPwdPo queryByLoginName(String loginName) {
        QueryWrapper<UserPwdPo> queryWrapper = Wrappers.query();
        queryWrapper.eq(UserPwdColumns.LOGIN_NAME.name(), loginName);
        return super.getOne(queryWrapper);
    }

    @Override
    public UserPwdPo queryByUserId(String userId) {
        QueryWrapper<UserPwdPo> queryWrapper = Wrappers.query();
        queryWrapper.eq(UserPwdColumns.USER_ID.name(), userId);
        return super.getOne(queryWrapper);
    }

    @Override
    public long count(UserPwdPo userPwdPo) {
        QueryWrapper<UserPwdPo> queryWrapper = createQuery(userPwdPo);
        return super.count(queryWrapper);
    }

    @Override
    public List<UserPwdPo> queryList(int index, int size, UserPwdPo userPwdPo) {
        QueryWrapper<UserPwdPo> queryWrapper = createQuery(userPwdPo);
        if (size > 0) {
            Page<UserPwdPo> page = new Page<>(index, size, false);
            return super.page(page, queryWrapper).getRecords();
        }
        // queryWrapper.orderBy(true, false, UserPwdColumns.ID.name());
        return getBaseMapper().selectList(queryWrapper);
    }

    private QueryWrapper<UserPwdPo> createQuery(UserPwdPo userPwdPo) {
        QueryWrapper<UserPwdPo> queryWrapper = Wrappers.query();
        if (userPwdPo.getId() != null) {
            queryWrapper.eq(UserPwdColumns.ID.name(), userPwdPo.getId());
        }
        // if (StringUtil.isNotEmpty(userPwdPo.getDeptCode())) {
        // queryWrapper.eq(UserPwdColumns.DEPT_CODE.name(), userPwdPo.getDeptCode());
        // }
        if (StringUtil.isNotEmpty(userPwdPo.getUserId())) {
            queryWrapper.eq(UserPwdColumns.USER_ID.name(), userPwdPo.getUserId());
        }
        if (StringUtil.isNotEmpty(userPwdPo.getLoginName())) {
            queryWrapper.eq(UserPwdColumns.LOGIN_NAME.name(), userPwdPo.getLoginName());
        }
        // if (StringUtil.isNotEmpty(userPwdPo.getUserType())) {
        // queryWrapper.eq(UserPwdColumns.USER_TYPE.name(), userPwdPo.getUserType());
        // }
        if (StringUtil.isNotEmpty(userPwdPo.getLoginPwd())) {
            queryWrapper.eq(UserPwdColumns.LOGIN_PWD.name(), userPwdPo.getLoginPwd());
        }
        // if (StringUtil.isNotEmpty(userPwdPo.getForceMod())) {
        // queryWrapper.eq(UserPwdColumns.FORCE_MOD.name(), userPwdPo.getForceMod());
        // }
        // if (userPwdPo.getErrTimeLogin() != null) {
        // queryWrapper.eq(UserPwdColumns.ERR_TIME_LOGIN.name(),
        // userPwdPo.getErrTimeLogin());
        // }
        // if (userPwdPo.getErrCount() != null) {
        // queryWrapper.eq(UserPwdColumns.ERR_COUNT.name(), userPwdPo.getErrCount());
        // }
        // if (StringUtil.isNotEmpty(userPwdPo.getErrDate())) {
        // queryWrapper.eq(UserPwdColumns.ERR_DATE.name(), userPwdPo.getErrDate());
        // }
        return queryWrapper;
    }

    @Override
    public UserPwdPo queryFirst(UserPwdPo userPwdPo) {
        QueryWrapper<UserPwdPo> queryWrapper = Wrappers.query();
        if (userPwdPo.getId() != null) {
            queryWrapper.eq(UserPwdColumns.ID.name(), userPwdPo.getId());
        }
        // if (StringUtil.isNotEmpty(userPwdPo.getDeptCode())) {
        // queryWrapper.eq(UserPwdColumns.DEPT_CODE.name(), userPwdPo.getDeptCode());
        // }
        if (StringUtil.isNotEmpty(userPwdPo.getUserId())) {
            queryWrapper.eq(UserPwdColumns.USER_ID.name(), userPwdPo.getUserId());
        }
        if (StringUtil.isNotEmpty(userPwdPo.getLoginName())) {
            queryWrapper.eq(UserPwdColumns.LOGIN_NAME.name(), userPwdPo.getLoginName());
        }
        // if (StringUtil.isNotEmpty(userPwdPo.getUserType())) {
        // queryWrapper.eq(UserPwdColumns.USER_TYPE.name(), userPwdPo.getUserType());
        // }
        if (StringUtil.isNotEmpty(userPwdPo.getLoginPwd())) {
            queryWrapper.eq(UserPwdColumns.LOGIN_PWD.name(), userPwdPo.getLoginPwd());
        }
        // if (StringUtil.isNotEmpty(userPwdPo.getForceMod())) {
        // queryWrapper.eq(UserPwdColumns.FORCE_MOD.name(), userPwdPo.getForceMod());
        // }
        // if (userPwdPo.getErrTimeLogin() != null) {
        // queryWrapper.eq(UserPwdColumns.ERR_TIME_LOGIN.name(),
        // userPwdPo.getErrTimeLogin());
        // }
        // if (userPwdPo.getErrCount() != null) {
        // queryWrapper.eq(UserPwdColumns.ERR_COUNT.name(), userPwdPo.getErrCount());
        // }
        // if (StringUtil.isNotEmpty(userPwdPo.getErrDate())) {
        // queryWrapper.eq(UserPwdColumns.ERR_DATE.name(), userPwdPo.getErrDate());
        // }
        // queryWrapper.orderBy(true, false, UserPwdPoColumns.ID.name());
        return super.getOne(queryWrapper);
    }

    @Override
    public UserPwdPo queryById(Serializable id) {
        return super.getById(id);
    }

    @Override
    public boolean insert(UserPwdPo userPwdPo) {
//        userPwdPo.setVersion(1);
        userPwdPo.setUpdateTime(new java.sql.Timestamp(System.currentTimeMillis()));
        return super.save(userPwdPo);
    }

    @Override
    public boolean insertBatch(List<UserPwdPo> listUserPwdPos) {
        int rs = getBaseMapper().insertBatchSomeColumn(listUserPwdPos);
        return SqlHelper.retBool(rs);
    }

    @Override
    public boolean updateById(UserPwdPo userPwdPo) {
        UpdateWrapper<UserPwdPo> updateWrapper = Wrappers.update();
        updateWrapper.eq(UserPwdColumns.ID.name(), userPwdPo.getId());
//        updateWrapper.eq(UserPwdColumns.VERSION.name(), userPwdPo.getVersion());
//        userPwdPo.setVersion(userPwdPo.getVersion() + 1);
        boolean rs = super.update(userPwdPo, updateWrapper);
        // 根据ID更新所有字段，空值也更新
        // int num = getBaseMapper().alwaysUpdateSomeColumnById(ucpBatchInfoPo);
        // boolean rs = SqlHelper.retBool(num);
        if (!rs) {
            throw new UpdateZeroException();
        }
        return rs;
    }

    @Override
    public boolean deleteByIds(Serializable[] ids) {
        UpdateWrapper<UserPwdPo> updateWrapper = Wrappers.update();
        updateWrapper.in(UserPwdColumns.ID.name(), (Object[]) ids);
        return super.remove(updateWrapper);
    }

//    public UserPwdPo queryByExample(UserPwdPo userPwdPo) {
//        QueryWrapper<UserPwdPo> queryWrapper = Wrappers.query();
//        if (userPwdPo.getId() != null) {
//            queryWrapper.eq(UserPwdColumns.ID.name(), userPwdPo.getId());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getDeptCode())) {
//            queryWrapper.eq(UserPwdColumns.DEPT_CODE.name(), userPwdPo.getDeptCode());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getUserId())) {
//            queryWrapper.eq(UserPwdColumns.USER_ID.name(), userPwdPo.getUserId());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getLoginName())) {
//            queryWrapper.eq(UserPwdColumns.LOGIN_NAME.name(), userPwdPo.getLoginName());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getUserType())) {
//            queryWrapper.eq(UserPwdColumns.USER_TYPE.name(), userPwdPo.getUserType());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getLoginPwd())) {
//            queryWrapper.eq(UserPwdColumns.LOGIN_PWD.name(), userPwdPo.getLoginPwd());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getForceMod())) {
//            queryWrapper.eq(UserPwdColumns.FORCE_MOD.name(), userPwdPo.getForceMod());
//        }
//        if (userPwdPo.getErrTimeLogin() != null) {
//            queryWrapper.eq(UserPwdColumns.ERR_TIME_LOGIN.name(), userPwdPo.getErrTimeLogin());
//        }
//        if (userPwdPo.getErrCount() != null) {
//            queryWrapper.eq(UserPwdColumns.ERR_COUNT.name(), userPwdPo.getErrCount());
//        }
//        if (StringUtil.isNotEmpty(userPwdPo.getErrDate())) {
//            queryWrapper.eq(UserPwdColumns.ERR_DATE.name(), userPwdPo.getErrDate());
//        }
//		Page<UserPwdPo> page = new Page<>(0, 1, false);
//		queryWrapper.orderBy(true, false, UserPwdPoColumns.ID.name());
//    }

}
